package com.ruoyi.system.api.service.impl;

import java.util.Date;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.api.ResponseWithData;
import com.ruoyi.system.api.domain.PlanDetails;
import com.ruoyi.system.api.domain.ServiceNotice;
import com.ruoyi.system.api.mapper.PlanDetailsMapper;
import com.ruoyi.system.api.mapper.ServiceNoticeMapper;
import com.ruoyi.system.api.service.CcService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.api.mapper.ServiceDetailsMapper;
import com.ruoyi.system.api.domain.ServiceDetails;
import com.ruoyi.system.api.service.IServiceDetailsService;
import com.ruoyi.common.core.text.Convert;

/**
 * 工程师FSE计划详情 工程师FSE计划详情（服务通知子）Service业务层处理
 * 
 * @author shihx
 * @date 2020-03-07
 */
@Service
public class ServiceDetailsServiceImpl implements IServiceDetailsService
{
    @Autowired
    private ServiceDetailsMapper serviceDetailsMapper;

    @Autowired
    private PlanDetailsMapper planDetailsMapper;

    @Autowired
    private ServiceNoticeMapper serviceNoticeMapper;



    @Autowired
    private CcService ccService;


    /**
     * 查询工程师FSE计划详情 工程师FSE计划详情（服务通知子）
     *
     * @param id 工程师FSE计划详情 工程师FSE计划详情（服务通知子）ID
     * @return 工程师FSE计划详情 工程师FSE计划详情（服务通知子）
     */
    @Override
    public ServiceDetails selectServiceDetailsById(Long id)
    {
        return serviceDetailsMapper.selectServiceDetailsById(id);
    }

    /**
     * 查询工程师FSE计划详情 工程师FSE计划详情（服务通知子）列表
     *
     * @param serviceDetails 工程师FSE计划详情 工程师FSE计划详情（服务通知子）
     * @return 工程师FSE计划详情 工程师FSE计划详情（服务通知子）
     */
    @Override
    public List<ServiceDetails> selectServiceDetailsList(ServiceDetails serviceDetails)
    {
        return serviceDetailsMapper.selectServiceDetailsList(serviceDetails);
    }

    @Override
    public ServiceDetails selectServiceDetails(String serviceNo, String fseId)
    {
        ServiceDetails serviceDetails = new ServiceDetails();
        serviceDetails.setServiceNo(serviceNo);
        serviceDetails.setFseId(fseId);
        List<ServiceDetails> serviceDetailsList = selectServiceDetailsList(serviceDetails);
        if(serviceDetailsList!=null && serviceDetailsList.size()>0){
            return serviceDetailsList.get(0);
        }
        return null;
    }

    /**
     * 新增工程师FSE计划详情 工程师FSE计划详情（服务通知子）
     *
     * @param serviceDetails 工程师FSE计划详情 工程师FSE计划详情（服务通知子）
     * @return 结果
     */
    @Override
    public int insertServiceDetails(ServiceDetails serviceDetails)
    {
        serviceDetails.setCreateTime(DateUtils.getNowDate());
        return serviceDetailsMapper.insertServiceDetails(serviceDetails);
    }

    /**
     * 修改工程师FSE计划详情 工程师FSE计划详情（服务通知子）
     *
     * @param serviceDetails 工程师FSE计划详情 工程师FSE计划详情（服务通知子）
     * @return 结果
     */
    @Override
    public int updateServiceDetails(ServiceDetails serviceDetails)
    {
        serviceDetails.setUpdateTime(DateUtils.getNowDate());
        return serviceDetailsMapper.updateServiceDetails(serviceDetails);
    }

    /**
     * 删除工程师FSE计划详情 工程师FSE计划详情（服务通知子）对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteServiceDetailsByIds(String ids)
    {
        return serviceDetailsMapper.deleteServiceDetailsByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除工程师FSE计划详情 工程师FSE计划详情（服务通知子）信息
     *
     * @param id 工程师FSE计划详情 工程师FSE计划详情（服务通知子）ID
     * @return 结果
     */
    @Override
    public int deleteServiceDetailsById(Long id)
    {
        return serviceDetailsMapper.deleteServiceDetailsById(id);
    }

    /**
     *  查询服务单下实习人员列表
     *
     * @param serviceNo
     * @param fseName
     * @return com.ruoyi.system.api.ResponseWithData<?>
     * @author yzg
     * @date 2020/3/23 3:56 下午
     */
    @Override
    public List<ServiceDetails> selectTrainPeople(String serviceNo, String fseName) {
        return serviceDetailsMapper.selectTrainPeople(serviceNo, fseName);
    }

    @Override
    public ResponseWithData<?> deleteServiceDetails(String serviceNoticeId, String enginnerId,String sendenginnerId) {



        // 查询是否删除的是拒绝的数据
        ServiceDetails serviceDetails1 = new ServiceDetails();
        serviceDetails1.setServiceNoticeId(Long.parseLong(serviceNoticeId));
        serviceDetails1.setFseId(enginnerId);
        serviceDetails1.setState(6L);
        List<ServiceDetails> detailsList = serviceDetailsMapper.selectServiceDetailsList(serviceDetails1);

        ServiceDetails serviceDetails = new ServiceDetails();
        PlanDetails planDetails = new PlanDetails();

        // 如果是拒绝的数据，数据重新归置为待接受状态
        if(detailsList!=null && detailsList.size()>0){
            serviceDetails.setState(0L);
            planDetails.setState("0");
        }

        serviceDetails.setDelFlag("2");
        serviceDetails.setServiceNoticeId(Long.parseLong(serviceNoticeId));
        serviceDetails.setFseId(enginnerId);
        serviceDetailsMapper.updateDelServiceDetails(serviceDetails);

        planDetails.setDelFlag("2");
        planDetails.setServiceNoticeId(Long.parseLong(serviceNoticeId));
        planDetails.setFseId(enginnerId);
        planDetailsMapper.updateDelPlanDetail(planDetails);



        // cc 通知开始
        //查询 cc
        ServiceDetails serviceDetailsSearch = new ServiceDetails();
        serviceDetailsSearch.setServiceNoticeId(Long.parseLong(serviceNoticeId));
        serviceDetailsSearch.setDelFlag("0");
        List<ServiceDetails> detailsListSearch = serviceDetailsMapper.selectServiceDetailsList(serviceDetailsSearch);
        StringBuffer enids=new StringBuffer();
        String serviceNo="";
        if(detailsListSearch.size()>0){
            serviceNo=detailsListSearch.get(0).getServiceNo();
            for (ServiceDetails  details:detailsListSearch){
                if(!"6".equals(details.getState()+"")){
                    enids.append(details.getFseId()+",");
                }
            }

          String dnginnerIds=enids.toString();
            if(dnginnerIds.length()>1){
                String ids = dnginnerIds.substring(0, dnginnerIds.length() - 1);
                String ccFlag= ccService.dispatchServicehandle(sendenginnerId,new Date(), serviceNo, ids);
                if(!"1".equals(ccFlag)){
                    return new ResponseWithData<>().success().msg("CC接口调用异常").code(200);
                }
            }
        }
        //else {
          //  ServiceNotice serviceNotice=serviceNoticeMapper.selectServiceNoticeById(new Long(serviceNoticeId));
           // ccService.refuseServicehandle(enginnerId, serviceNotice.getServiceNo());
       // }



        //cc 通知结束

        return new ResponseWithData<>().success().msg("删除成功").code(200);
    }
}
